配置国内源
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
yum -y update
关闭防火墙,selinux和 swap
#防火墙
systemctl stop firewalld & systemctl disable firewalld
#selinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
#swap 用top查看swap情况,会看到swap的使用为0
swapoff -a
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
设置路由
| 配置内核参数,将桥接的IPv4流量传递到iptables的链
yum install -y bridge-utils.x86_64
modprobe br_netfilter # 加载br_netfilter模块,使用lsmod查看开启的模块
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 重新加载所有配置文件
安装docker
# 配置docker源
yum -y install yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
# 安装合适的docker版本
# 由于k8s支持的docker版本存在一定的滞后,要选择好合适的docker版本 yum list docker-ce --showduplicates | sort -r
yum -y install docker-ce-18.09.9
systemctl start docker & systemctl enable docker
配置docker
# 修改docker cgroup驱动 与k8s一致,使用systemd:native.cgroupdriver=systemd
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
# 重启docker使配置生效
systemctl restart docker
安装k8s组件
# 配置k8s yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#在master节点安装kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
#开机启动kubelet
systemctl enable --now kubelet # 开机启动kubelet
修改hostname
hostnamectl set-hostname centos-master
cat <<EOF >>/etc/hosts
172.16.0.3 centos-master
EOF
部署master节点
# 在master进行k8s集群初始化
kubeadm init --kubernetes-version=1.16.3 \
--apiserver-advertise-address=172.16.0.3 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=172.1.0.0/16 \
--pod-network-cidr=172.244.0.0/16
# 定义POD的网段为:192.244.0.0/16,api server地址就是master本机IP地址。
#记录生成的最后部分内容,此内容需要在其它节点加入k8s集群时执行
kubeadm join 172.16.0.3:6443 --token bvkgue.f5zpauffltb6zkzi \
--discovery-token-ca-cert-hash sha256:3113f037dce468decbf284d3ef7d19809513906ddaa79e6b4496f1d4a1a98c88
# 配置kubectl工具
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
在master节点部署flannel网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
将master节点作为工作节点
k8s集群默认不会将Pod调度到master上,这样master的资源就浪费了。在master上,可以运行以下命令使其作为一个工作节点:
kubectl taint nodes --all node-role.kubernetes.io/master-
验证集群是否正常
kubectl get nodes
kubectl get pods -n kube-system